home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / science / nrlibe32.zip / NREBP32.C < prev    next >
C/C++ Source or Header  |  1994-12-14  |  10KB  |  290 lines

  1. /*****************************************************************************/
  2. /*                                                                           */
  3. /*             INTERACTIVE PROGRAM FOR FORWARD EBP NETS MANAGEMENT           */
  4. /*                                                                           */
  5. /*****************************************************************************/
  6.  
  7. # include "nrlib32.h"
  8. # include <stdio.h>
  9. # include <stdlib.h>
  10.  
  11. char  fileinp[50]="nnetsinp.dat";
  12. char  fileout[50]="nnetsout.dat";
  13. char  fileese[50]="nettrain.dat";
  14.  
  15. int   nep=1;
  16. float minerr=0;
  17. float epsl=0.8;
  18. float alfa=0.5;
  19. float randa=-0.4;
  20. float randb=0.4;
  21. int   flgbias=0;
  22. int   numr=1;
  23. int   treti=0;
  24.  
  25. int   menu();
  26. int   creazione();
  27. int   modpar();
  28. int   help();
  29.  
  30. # define NULLO 0
  31.  
  32. /*************************** MAIN ******************************************/
  33.  
  34.  
  35. main(int argc, char *argv[])
  36. {
  37.  long t1; long t2;
  38.  int i;int fio;
  39.  int fun;
  40.  char nes[20],ers[20],fbs[10],eps[20],mos[20],ras[20],rbs[20];
  41.  fun=0;
  42.  
  43.  for (i=1;i<argc;i++)
  44.  {
  45.    if (strncmp(argv[i],"/fu=",4) == 0)  {fun=atoi(argv[i]+4);continue;}
  46.    if (strncmp(argv[i],"/ne=",4) == 0)  {nep=atoi(argv[i]+4);continue;}
  47.    if (strncmp(argv[i],"/er=",4) == 0)  {minerr=atof(argv[i]+4);continue;}
  48.    if (strncmp(argv[i],"/fi=",4) == 0)  {strcpy(fileinp,argv[i]+4);continue;}
  49.    if (strncmp(argv[i],"/fo=",4) == 0)  {strcpy(fileout,argv[i]+4);continue;}
  50.    if (strncmp(argv[i],"/fe=",4) == 0)  {strcpy(fileese,argv[i]+4);continue;}
  51.    if (strncmp(argv[i],"/nt=",4) == 0)  {numr=atoi(argv[i]+4);continue;}
  52.    if (strncmp(argv[i],"/bf=",4) == 0)  {flgbias=atoi(argv[i]+4);continue;}
  53.    if (strncmp(argv[i],"/h",2) == 0)    {help();fine();}
  54.    if (strncmp(argv[i],"?",1)  == 0)    {help();fine();}
  55.    if (strncmp(argv[i],"/?",2) == 0)    {help();fine();}
  56.  }
  57.  t1=clock();
  58.  
  59.  sprintf(nes,"%d",nep);
  60.  sprintf(ers,"%f",minerr);
  61.  sprintf(fbs,"%d",flgbias);
  62.  param("ne",nes);
  63.  param("er",ers);
  64.  param("fb",fbs);
  65.  
  66.  param("fd","0");
  67.  
  68.  switch(fun)
  69.  {
  70.    case 0: loadnet(fileinp);produce(numr,"","");break;
  71.    case 1: menu();break;
  72.    case 2: printf("\n Loading and training net %d for %d epochs",numr,nep);
  73.        loadnet(fileinp);
  74.        param("fd","1");train(numr,fileese);
  75.        savenet(fileout);
  76.        printf("\n Saved nets to file %s ",fileout);
  77.        break;
  78.  }
  79.  
  80.  t2=clock();
  81.  printf("\n Time spent: %5.2f sec.",((float)(t2-t1))/CLOCK_PS);
  82.  cancnets();
  83.  return;
  84. }
  85.  
  86. menu()
  87. {
  88.  char sel[10];
  89.  int ss;
  90.  LONG sn,en;
  91.  int nninp;
  92.  FILE *fp;
  93.  do
  94.  {
  95.  printf("\x1B[2J");
  96.  printf("\n                NET MANAGEMENT GENERAL MENU             \n\n\n");
  97.  if (treti > 0) printf("\n %d Nets in memory \n\n",treti);
  98.  if (treti == 0) printf("\n No nets in memory \n\n");
  99.  printf("\n            1 - Nets load   \n");
  100.  printf("\n            2 - Nets create \n");
  101.  printf("\n            3 - Compute net  %d\n",numr);
  102.  printf("\n            4 - Train   net  %d\n",numr);
  103.  printf("\n            5 - Nets save     \n");
  104.  printf("\n            6 - Modify parameters \n");
  105.  printf("\n\n\n Choose (0 = exit)  : ");
  106.  scanf("%4s",sel);ss=atoi(sel);fflush(stdin);
  107.  param("fd","0");
  108.  switch(ss)
  109.  {
  110.    case 1: fp=fopen(fileinp,"r");if (fp == (void *)NULLO)
  111.        {printf("\n File %s does not exist !",fileinp);scanf("%c",&sel[0]);
  112.        fflush(stdin);break;}
  113.        fclose(fp);
  114.        loadnet(fileinp);rmnet(&treti);break;
  115.    case 2: creazione();break;
  116.    case 3: printf("\n\n Compute net %d ;",numr);
  117.        rlay(numr,0,&sn,&en);nninp=en-sn+1;
  118.        printf(" insert %d value for input ;",nninp);
  119.        printf(" digit Ctrl-Z for return");
  120.        produce(numr,"","");break;
  121.    case 4: fp=fopen(fileese,"r");if (fp == (void *)NULLO)
  122.        {printf("\n File %s does not exist !",fileinp);scanf("%c",&sel[0]);
  123.        fflush(stdin);break;}
  124.        fclose(fp);
  125.        {param("fd","2");train(numr,fileese);
  126.         printf("\n\n Press <enter> for more...");
  127.         scanf("%c",&sel[0]);fflush(stdin);
  128.         break;}
  129.    case 5: fp=fopen(fileout,"r");if (fp != (void *)NULLO)
  130.        {printf("\n File %s already exist, overwrite it? (n/y)",fileinp);
  131.        scanf("%c",&sel[0]);fflush(stdin);if (sel[0]!='y')
  132.        {printf("\n NOT SAVED!"); scanf("%c",&sel[0]);fflush(stdin);fclose(fp);break;}
  133.        fclose(fp);}
  134.        fp=fopen(fileout,"w");if (fp == (void *)NULLO)
  135.        {printf("\n Impossible to open file %s !",fileinp);scanf("%c",&sel[0]);
  136.        break;}
  137.        fclose(fp);
  138.        printf("\n SAVE FILE %s",fileout);
  139.        savenet(fileout);break;
  140.    case 6: modpar();break;
  141.  }
  142.  }while (ss != 0);
  143.  return 0;
  144. }
  145.  
  146. creazione()
  147. {
  148.  int nliv,i,ret,cnr,nr,maxliv,strmaxliv;
  149.  int  vliv[1000];
  150.  LONG vn[100];
  151.  char vf[100][10];
  152.  char va[100][10];
  153.  char ch;
  154.  
  155.  rete:
  156.  printf("\x1B[2J");
  157.  printf("\n            DEFINITION OF ALL NETS STRUCTURE     \n\n\n\n");
  158.  printf("\n Total nets  (max   1000) : ");
  159.  scanf("%d",&treti);fflush(stdin);
  160.  if (treti > 1000) goto rete;
  161.  printf("\n");
  162.  printf("\n All equals nets   ? (y/n):",i);
  163.  ret=scanf("%c",&ch);fflush(stdin);if (ret<1) return;
  164.  cnr=treti;if (ch != 'n') cnr=1;
  165.  if (cnr == 1)
  166.  { printf("\n Last net layer     (0 -- 99) : "); }
  167.  else
  168.  { printf("\n Max last net layer (0 -- 99) : "); }
  169.  scanf("%d",&nliv);fflush(stdin);
  170.  if (nliv > 99) goto rete;
  171.  maxliv=nliv;
  172.  for (nr=1;nr<=treti;nr++) vliv[nr]=maxliv;
  173.  createstruct(treti,vliv);
  174.  
  175.  for (nr=1;nr<=cnr;nr++)
  176.  {
  177.  livelli:
  178.  printf("\x1B[2J");
  179.  printf("\n               NET DEFINITION          %d\n\n\n\n",nr);
  180.  if (cnr != 1)
  181.  {
  182.  rmlay(nr,&strmaxliv);
  183.  printf("\n Last layer   (actualy %d) : ",strmaxliv);
  184.  scanf("%d",&nliv);fflush(stdin);
  185.  maxliv=nliv;
  186.  if (maxliv > strmaxliv) goto livelli;
  187.  wmlay(nr,maxliv);
  188.  printf("\n");
  189.  }
  190.  for (i=0;i<=maxliv;i++)
  191.  {
  192.    printf("\n Total nodes of layer %3d                      :",i);
  193.    ret=scanf("%I",&vn[i]);fflush(stdin);if (ret<1) return;
  194.    printf("\n f1 : unitary function ");
  195.    printf("\n f3 : sigmoid positiv and negativ (f13 calculated)");
  196.    printf("\n f5 : sigmoid only positive (f15 calculated)");
  197.    printf("\n Activ-function of nodes of layer %3d (f1 - f15):",i);
  198.    ret=scanf("%10s",vf[i]);fflush(stdin);if (ret<1) return;
  199. /* printf("\n Action of nodes of layer         %3d :",i);     */
  200. /* ret=scanf("%10s",va[i]);fflush(stdin);if (ret<1) return;   */
  201.    strcpy(va[i],"0");
  202.  }
  203.  createnet(nr,vn,vf,va);
  204.  }
  205.  if (cnr == 1)
  206.  {
  207.    for (nr=2;nr<=treti;nr++) {createnet(nr,vn,vf,va);}
  208.  }
  209.  return;
  210. }
  211.  
  212.  
  213. modpar()
  214. {
  215.  char sel[10];
  216.  int ss;
  217.  char nes[20],ers[20],fbs[10],eps[20],mos[20],ras[20],rbs[20];
  218.  do
  219.  {
  220.   printf("\x1B[2J");
  221.   printf("\n               PARAMETERS               \n\n\n\n");
  222.   printf("\n  1 - Net load  file name      : %s ",fileinp);
  223.   printf("\n  2 - Net save  file name      : %s ",fileout);
  224.   printf("\n  3 - Trainer file   name      : %s ",fileese);
  225.   printf("\n  4 - Epochs                   : %d ",nep);
  226.   printf("\n  5 - Stop on q.error          : %f ",minerr);
  227.   printf("\n  6 - Learning coefficient     : %f ",epsl);
  228.   printf("\n  7 - Momentum coefficient     : %f ",alfa);
  229.   printf("\n  8 - Weigts random range      : %f %f",randa,randb);
  230.   printf("\n  9 - Bias adjust flag  (1=yes): %d ",flgbias);
  231.   printf("\n 10 - Net selected             : %d ",numr);
  232.   printf("\n\n\n What modify? (0=return): ");scanf("%4s",sel);ss=atoi(sel);
  233.   switch(ss)
  234.   {
  235.     case 1: printf("\n\n\nNet load file name  :");scanf("%s",fileinp);break;
  236.     case 2: printf("\n\n\nNet save file name  :");scanf("%s",fileout);break;
  237.     case 3: printf("\n\n\nTrainer file name   :");scanf("%s",fileese);break;
  238.     case 4: printf("\n\n\nEpochs :");scanf("%d",&nep);
  239.         sprintf(nes,"%d",nep);param("ne",nes);break;
  240.     case 5: printf("\n\n\nStop on q.err. :");scanf("%f",&minerr);
  241.         sprintf(ers,"%f",minerr);param("er",ers);break;
  242.     case 6: printf("\n\n\nLearning coefficient :");scanf("%f",&epsl);
  243.         sprintf(eps,"%f",epsl);param("ep",eps);break;
  244.     case 7: printf("\n\n\nMomentum coefficient :");scanf("%f",&alfa);
  245.         sprintf(mos,"%f",alfa);param("mo",mos);break;
  246.     case 8: printf("\n\n\nWeigts random range  :");scanf("%f %f",&randa,&randb);
  247.         sprintf(ras,"%f",randa);param("ra",ras);
  248.         sprintf(rbs,"%f",randb);param("rb",rbs);break;
  249.     case 9: printf("\n\n\nBias adjust flag :");scanf("%d",&flgbias);
  250.         sprintf(fbs,"%d",flgbias);param("fb",fbs);break;
  251.     case 10: printf("\n\n\nNet selected  :");scanf("%d",&numr);
  252.          if (numr > treti) numr = treti;break;
  253.   }
  254.  }while (ss != 0);
  255.  return 0;
  256. }
  257.  
  258. help()
  259. {
  260.  printf("\n ***** INTERACTIVE PROGRAM FOR FORWARD EBP NETS MANAGEMENT *****");
  261.  printf("\n ");
  262.  printf("\n Tree type of functionality:");
  263.  printf("\n - like a filter; load nets and compute 1 net from stdinp to stdout");
  264.  printf("\n - interactive menu to manage all nets");
  265.  printf("\n - batch net training ; load nets and train 1 net by trainer file");
  266.  printf("\n Command syntax: ");
  267.  printf("\n   nrebp31 [/fu=..] [/ne=..] [/er=..] [/fi=...] [/fo=...] [/fe=...]");
  268.  printf("\n           [/nt=..] [/bf=..] [/h] [?] [/?]");
  269.  printf("\n   fu : functionality)");
  270.  printf("\n        0 - like a filter             (def = 0)");
  271.  printf("\n        1 - interactive menu ");
  272.  printf("\n        2 - batch training   ");
  273.  printf("\n   ne : learning epoch number         (def = 1)");
  274.  printf("\n   er : stop learning on q.error      (def = 0)");
  275.  printf("\n   bf : bias adjust flag              (def = 0 (no))");
  276.  printf("\n   nt : net selected                  (def = 1)");
  277.  printf("\n   fi : nets load file name           (def = nnetsinp.dat)");
  278.  printf("\n   fo : nets save file name           (def = nnetsout.dat)");
  279.  printf("\n   fe : trainer file name             (def = nettrain.dat)");
  280.  printf("\n ***************************************************************");
  281.  printf("\n");
  282.  return;
  283. }
  284.  
  285. fine()
  286. {
  287.  cancnets();
  288.  exit(0);
  289. }
  290.